#include <iostream>
#define STATIC_ASSERT(expr) ((void)sizeof(char[1 - 2 * !(expr)]))

#  if defined(_M_X64)
#    define ARCHITECTURE_X86_64
#  elif defined(_M_IX86)
#    define ARCHITECTURE_X86_32
#  elif defined(_M_ARM64)
#    define ARCHITECTURE_ARM64
#  elif defined(_M_ARM)
#    define ARCHITECTURE_ARM32
#  endif

typedef size_t word;
#define WORD_BYTES (sizeof(word))
#define WORD_BITS (8 * WORD_BYTES)
#if defined(ARCHITECTURE_X86_32) || defined(ARCHITECTURE_ARM32)
#define _WORD_BYTES 4
#define _WORD_BITS 32
#elif defined(ARCHITECTURE_X86_64) || defined(ARCHITECTURE_ARM64)
#define _WORD_BYTES 8
#define _WORD_BITS 64
#  endif

int main()
{
	STATIC_ASSERT(true);
	std::cout << WORD_BYTES << " " << WORD_BITS << std::endl;
	std::cout << _WORD_BYTES << " " << _WORD_BITS << std::endl;
	return 0;
}